/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logic;

import java.util.Calendar;

/**
 * Clase Rifa, extiende de Objeto. Tiene como atributos la descripción, categoría,
 * el valor del ticket y del producto, la fecha de inicio y de sorteo, un arreglo
 * de tickets que coresponden a la rifa y el número del ticket ganador si lo hay.
 * @author Victoria Fuenmayor y Jose Gabriel Rivera
 */

public class Rifa extends Objeto {
    private String descripcion;
    private Categoria categoria;
    private double valorTicket;
    private double valorProducto;
    private Calendar fechaIni;
    private Calendar fechaFin;
    private Boleto aTickets[];
    private int nroGanador;

    /**
     * Recibe y asigna la descripción, categoría, valor del ticket y del producto, la fecha
     * de inicio y de sorteo. Además recibe el nombre y el id que tendrá la rifa como objeto.
     * Inicializa el arreglo de 100 tickets y crea los 100 tickets.
     * Setea el número del ticket ganador en -1 por defecto indicando que aún no hay ganador.
     * @param id
     * @param nombre
     * @param descripcion
     * @param categoria
     * @param valorTicket
     * @param valorProducto
     * @param fechaIni
     * @param fechaFin 
     */
    public Rifa(int id, String nombre, String descripcion, Categoria categoria, double valorTicket, double valorProducto, Calendar fechaIni, Calendar fechaFin) {
        super(id,nombre);
        this.descripcion = descripcion;
        this.categoria = categoria;
        this.valorTicket = valorTicket;
        this.valorProducto = valorProducto;
        this.fechaIni = fechaIni;
        this.fechaFin = fechaFin;
        
        aTickets = new Boleto[100];
        for(int i=0;i<aTickets.length;i++){
            aTickets[i] = new Boleto(i);
        }
        
        this.nroGanador = -1; 
    }
    
    /**
     * Getter para la descripcion de la rifa
     * @return Retorna la descripción de la rifa (String)
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * Setter para la descripción de la rifa
     * @param descripcion Recibe la descripción de la rifa (String)
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    /**
     * Getter para la categoría de la rifa
     * @return Retorna la categoría de la rifa (Categoria)
     */
    public Categoria getCategoria() {
        return categoria;
    }

    /**
     * Getter para el valor del ticket
     * @return Valor del ticket (double)
     */
    public double getValorTicket() {
        return valorTicket;
    }

    /**
     * Setter para el valor del ticket
     * @param valorTicket Recibe el valor del ticket (double)
     */
    public void setValorTicket(double valorTicket) {
        this.valorTicket = valorTicket;
    }

    /**
     * Getter para el valor del producto
     * @return Retorna el valor del producto (double)
     */
    public double getValorProducto() {
        return valorProducto;
    }

    /**
     * Setter para el valor del producto
     * @param valorProducto Recibe el valor del producto (double)
     */
    public void setValorProducto(double valorProducto) {
        this.valorProducto = valorProducto;
    }

    /**
     * Getter para la fecha de inicio de la rifa
     * @return Fecha de inicio de la rifa (Calendar)
     */
    public Calendar getFechaIni() {
        return fechaIni;
    }

    /**
     * Setter para la fecha de Inicio de la rifa 
     * @param fechaIni Recibe la fecha de inicio de la rifa (Calendar)
     */
    public void setFechaIni(Calendar fechaIni) {
        this.fechaIni = fechaIni;
    }

    /**
     * GEtter para la fecha del sorteo de la rifa
     * @return Fecha del sorteo de la rifa (Calendar)
     */
    public Calendar getFechaFin() {
        return fechaFin;
    }

    /**
     * Setter para la fecha del sorteo de la rifa
     * @param fechaFin Fecha del sorteo de la rifa (Calendar)
     */
    public void setFechaFin(Calendar fechaFin) {
        this.fechaFin = fechaFin;
    }

    /**
     * Metodo para obtener un ticket en específico. Se utiliza como index el 
     * ID del mismo.
     * @param id Id del ticket
     * @return Retorna el ticket (Boleto)
     */
    public Boleto getTicket(int id) {
        return aTickets[id];
    }

    /**
     * Getter para el numero ganador de la rifa. Si no hay ganador retorna -1
     * @return Retorna el numero ganador de la rifa
     */
    public int getNroGanador() {
        return nroGanador;
    }

    /**
     * Setter para el numero ganador
     * @param nroGanador Retorna el numero ganador
     */
    public void setNroGanador(int nroGanador) {
        this.nroGanador = nroGanador;
    }

    /**
     * Retorna el numero de tickets vendidos, si el ID del comprador en el ticket
     * es igual a -1, quiere decir que no se ha vendido. Cada ticket vendido aumenta en 1
     * el contador de tickets vendidos.
     * @return Numero de tickets vendidos (int)
     */
    public int getTicketsVendidos() {
        int ticketsVendidos = 0;
        for(int i=0;i<aTickets.length;i++){
            if(aTickets[i].getIdComprador()==-1){
                ticketsVendidos++;
            }
        }
        return ticketsVendidos;
    }

}